#include "util.hpp"
#include"config.hpp"
#include"data.hpp"
#include"hot.hpp"
#include"server.hpp"
#include"daemon.hpp"
#include<thread>

// void FileUtilTest(const std::string&filename){
    // cloud::FileUtil fu(filename);
    // std::cout<<fu.FileSize()<<std::endl;
    // std::cout<<fu.LastMTime()<<std::endl;
    // std::cout<<fu.LastATime()<<std::endl;
    // std::cout<<fu.FileName()<<std::endl;
    // cloud::FileUtil fu(filename);
    // std::string body;
    // fu.GetContent(body);
    
    // cloud::FileUtil ufn("./hello.txt");
    // ufn.SetContent(body);
    
    // std::string packname=filename+".lz";
    // cloud::FileUtil fu(filename);
    // fu.Compress(packname);
    // cloud::FileUtil pfu(packname);
    // pfu.UnCompress("./hello.txt");
    
//     cloud::FileUtil fu(filename);
//     fu.CreateDirectory();
//     std::vector<std::string>arry;
//     fu.ScanDirectory(&arry);
//     for(auto &a:arry)
//     {
//         std::cout<<a<<std::endl;
//     }

//     return ;
// }

// void JsonUtilTest()
// {
//        const char *name="张三";
//        int age=19;
//        float score[]={11,12,13};
//        Json::Value root;
//        root["姓名"]=name;
//        root["年龄"]=age;
//        root["成绩"].append(score[0]);
//        root["成绩"].append(score[1]);
//        root["成绩"].append(score[2]);
//        std::string json_str;
//        cloud::JsonUtil::Serialize(root,&json_str);
//        std::cout<<json_str<<std::endl;
//        Json::Value val;
//        cloud::JsonUtil::UnSerialize(json_str,&val);
//        std::cout<<val["姓名"].asString()<<std::endl;
//        std::cout<<val["年龄"].asInt()<<std::endl;
//        for(int i=0;i<val["成绩"].size();i++)
//        {
//          std::cout<<val["成绩"][i].asFloat()<<std::endl;
//        }
       
// }

// void ConfigTest()
// {
//     cloud::Config* config=cloud::Config::GetInstance();
//     std::cout<<config->GetHotTime()<<std::endl;
//     std::cout<<config->GetServerIp()<<std::endl;
//     std::cout<<config->GetServerPort()<<std::endl;
//     std::cout<<config->GetDownloadPrefix()<<std::endl;
//     std::cout<<config->GetPackFileSuffix()<<std::endl;
//     std::cout<<config->GetPackDir()<<std::endl;
//     std::cout<<config->GetBackDir()<<std::endl;
//     std::cout<<config->GetBackupFile()<<std::endl;
// }

// void DataTest(const std::string &filename)
// {
    // cloud::BackupInfo info;
    // info.NewBackupInfo(filename);
    // cloud::DateManger data;

    // std::cout<<"----------insert and GetoneURL-----\n";
    // data.Insert(info);

    // cloud::BackupInfo temp;
    // data.GetOneByURL("/download/bundle.h",&temp);

    // std::cout<<temp._packflag<<std::endl;
    // std::cout<<temp._fsize<<std::endl;
    // std::cout<<temp._packpath<<std::endl;
    // std::cout<<temp._atime<<std::endl;
    // std::cout<<temp._mtime<<std::endl;
    // std::cout<<temp._realpath<<std::endl;
    // std::cout<<temp._url<<std::endl;
    
    // std::cout<<"----------update and getall-----\n";
    // info._packflag=true;
    // data.Update(info);
    // std::vector<cloud::BackupInfo>arry;
    // data.GetAll(&arry);
    // for(auto &a:arry)
    // {
    //     std::cout<<a._packflag<<std::endl;
    //     std::cout<<a._fsize<<std::endl;
    //     std::cout<<a._mtime<<std::endl;
    //     std::cout<<a._atime<<std::endl;
    //     std::cout<<a._realpath<<std::endl;
    //     std::cout<<a._packpath<<std::endl;
    //     std::cout<<a._url<<std::endl;

    // }
    
    // std::cout<<"----------realpath-----\n";
    // data.GetOneByRealPath(filename,&temp);
    // std::cout<<temp._packflag<<std::endl;
    // std::cout<<temp._fsize<<std::endl;
    // std::cout<<temp._packpath<<std::endl;
    // std::cout<<temp._atime<<std::endl;
    // std::cout<<temp._mtime<<std::endl;
    // std::cout<<temp._realpath<<std::endl;
    // std::cout<<temp._url<<std::endl;

    // data.Storage();
    
    // std::vector<cloud::BackupInfo>arry;
    // cloud::DataManger data;
    // data.GetAll(&arry);
    // for(auto &a:arry)
    // {
    //     std::cout<<a._packflag<<std::endl;
    //     std::cout<<a._fsize<<std::endl;
    //     std::cout<<a._mtime<<std::endl;
    //     std::cout<<a._atime<<std::endl;
    //     std::cout<<a._realpath<<std::endl;
    //     std::cout<<a._packpath<<std::endl;
    //     std::cout<<a._url<<std::endl;
    // }
    
// }

cloud ::DataManger *_data;
void HotTest()
{
  cloud::HotManger hot;
  hot.RunModule();
}
void ServerTest()
{
   cloud::Server srv;
   srv.RunModule();

}
int main(int argc,char* argv[])
{    
     
     Daemon();
    _data=new cloud::DataManger();
    //FileUtilTest(argv[1]);
    //JsonUtilTest();
    //ConfigTest();
    //DataTest(argv[1]);
    //HotTest();
    //ServerTest();
    std::thread thread_hot_manager(HotTest);
    std::thread thread_server(ServerTest);
          
    thread_hot_manager.join();
    thread_server.join();
    
    return 0;
}
